package gold.gold01;

import java.util.Arrays;

/**
 * 中等
 */
public class S0107旋转矩阵 {
    /**
     * 100, 54
     * 从外到内, 每一圈转一圈。是逐层操作的。
     * 总是喜欢中分, 但是因为奇偶性的问题, 几乎所有想要中分的问题都会因此变得非常复杂，放弃中分做法
     * 或许可以枚举 左上角 高 n/2 宽 (n+1)/2 的矩形区域, 这是可以做到全覆盖的
     */
    public void rotate2(int[][] matrix){
        if(matrix == null || matrix.length == 0) return;
        // 有多少层
        int minLen = (matrix.length - 1) / 2;// 如果长度为5, 则为2, 4则为1, 是中间的数的索引
        // 矩阵大小
        int matLen = matrix.length;
        int temp1 = 0;
        for(int i = 0; i < minLen; i ++){
            // 第i层
            for(int j = i; j < matLen - i - 1; j ++){
                temp1 = matrix[i][j];
                matrix[i][j] = matrix[matLen - j - 1][i];
                matrix[matLen - j - 1][i] = matrix[matLen - i - 1][matLen - j - 1];
                matrix[matLen - i - 1][matLen - j - 1] = matrix[j][matLen - i - 1];
                matrix[j][matLen - i - 1] = temp1;
            }
        }
    }
    // 先左右翻转, 再按照对角线做镜像, 这相当于旋转90度
    public void rotate(int[][] matrix){

    }
    public static void main(String[] args) {
        int[][] matrix = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
        new S0107旋转矩阵().rotate(matrix);
        System.out.println(Arrays.deepToString(matrix)); // 看啊, deepToString可以打印二维数组
    }
}
